CTF线下AWD攻防赛的准备
参加的CTF线下赛不多,看了很多网上的文章,决定写一篇自己的AWD准备的文章。本人web狗,只在总结了AWD中web的套路,二进制目前还没有接触orz
0x01 修改ssh密码
很多比赛主办方给出的ssh密码是默认的,或者密码是随机的长串字母数字,首先应该修改ssh密码,改成队伍所以人都知道,注意不要用弱密码。
其次不多见的是主办方给了ssh弱密码,就是所有队伍的ssh密码都是一样的,这时候手速一定要快,防止密码被别人人修改,那还没登陆就gg了,如果可能脚本修改其他队伍的密码,做一些不可描述的事情hhh。
准备change_ssh脚本
0x02 dump源码
一般比赛是不会给出源码的,需要从自己的服务器dump下来。速度一定要快。修改完ssh密码接着就dump源码。注意dump源码一定要在上waf、文件监控执行,保留最初始的源码。有助于审计和恢复源码。方法有两种:
1、利用图形化软件XFTP或者FileZilla Client直接下载源码。
2、利用命令:
scp -r -P Port remote_username@\remote_ip:remote_folder local_file
命令不好用,自我感觉还是用图形化软件吧。
3、备份web目录:
tar -zcvf web.tar.gz /var/www/html/
0x02 备份数据库
1、找数据库配置文件,找到db_name、db_user和db_passwd
2、登陆数据库,命令备份数据库:
mysqldump -u db_user -p db_passwd db_name > bak.sql
//备份指定数据库cd /var/lib/mysql
mysqldump -u db_user -p db_passwd > bak.sql
//先进入数据库目录再备份mysqldump --all-databases > bak.sql
//备份所有数据库
3、还原数据库:
mysql -u db_user -p db_passwd db_name < bak.sql
//还原指定数据库cd /var/lib/mysql
mysql -u db_user db_passwd < bak.sql
//先进入数据库目录再还原
还有一种方法:mysql -u db_name -p
input passwd 进入mysql控制台mysql>
mysql> show databases;
看看有哪些数据库
mysql> create database test ;
建立要还原的数据库
mysql> use test;
切换到刚创建的数据库
mysql> source test.sql;
导入数据库
ps:如果是数据库弱密码的话,尝试能不能登陆数据库改密码、写shell、或者删库。
准备 AWD_weaksql脚本、修改密码脚本、删库脚本
0x03 上waf
waf能不能上要看主办方的check机制,一定要小心,特别容易checkdown,导致失分。
准备 waf.php
0x04 上流量监控脚本
流量监控脚本要让入口文件或所有文件包含
require_once('monitor.php');
find /var/www/html -type f -path "*.php" | xargs sed -i "s/<?php/<?php\n require_once('\/tem\/waf.php');\n/g"
准备 monitor.php
0x05 D盾木马查杀
把dump下来的源码扔进D盾查杀。发现后门先清理自己的服务器,能修改则修改不能修改则注释掉。
经常出现一些难以发现的后门,即使盾扫出来,也不会利用的,如上次蓝帽杯初赛的weekly后门,还有代码执行的后门。
ps:需要总结常见的变形后门。
0x06 代码审计
一般利用seay源代码审计工具,虽然没什么用,大致有个审计的方向。
几点思路:
- 比赛可能是一些主流的cms,查找cms,如果有外网可以直接搜cms,看最近爆出的漏洞和下载最新版本的cms,直接覆盖安装,可以修复很多漏洞。
- 白盒审计结合黑盒测试,要注意网站后台是否是弱密码,或者容易爆破,如果是弱密码,可以先改一波其他队伍的,再测试是否有漏洞,特别是在模板更新、资料修改的地方。
常见的漏洞有:
sql注入
文件上传
文件包含
命令执行
代码执行最常见的就是各种rce,要巧妙利用。
可能水平有限,根本审不出什么漏洞,要时刻注意文件监控脚本,看被打的流量,及时补洞。种植后门一般是批量,所以后门的路径和密码都是一样的,所以也可以利用被人种下的后门攻击一波。注意监控到的流量一般包含很多混淆流量,不容易看。
上次蓝帽初赛并没有抓到有用的被打流量,这个还是得好好测试下。
防御
1. waf慎重。
2. 多留意有没有被种下后门或者不死马之类的,多备份几次源码,用D盾扫,很容易扫到其他队伍的后门。
克制不死马的方法:脚本、命令、骚套路
3. 修改数据库、后台、ssh密码之类的前边提到了,不再累述。
4. 权限加固,如upload文件夹的权限设置为644,再尝试修改所有可写目录,这里要注意防止checkdown,一些shell命令:
- 查找命令find
1 | :: 全盘查找可写目录(可写文件 -type f) |
- 设置权限命令chmod
1 | :: 完整命令 |
- 设置所有权命令chown
1 | :: 将当前目录下所有文件和子目录的拥有者和所属用户组修改为user和group,该命令一般需要root权限 |
- 设置不可修改命令chattr
在常见的Linux扩展文件系统中(如ext2/ext3/ext4等),可以借助某种文件属性将文件设置为不可修改(immutable)。一旦设置,任何用户(包括超级用户)都不能删除修改该文件,除非其不可修改的属性被移除。
1 | :: 设置不可修改 |
5. 文件监控 除了监控脚本外,还有一些命令:
- 访问监控
1 | :: 打印全盘最近5分钟内访问过的所有文件 |
- 修改监控
1 | :: 每5分钟监视全盘最近5分钟内修改过的所有文件 |
- 新增监视
1 | :: 每5分钟监视全盘最近5分钟内新增的所有文件 |
- 变化监视
1 | :: 最终神器 |
6. 进程监控
1 | :: 每1分钟监视进程新增情况(未测试) |
1 | :: 显示所有当前进程 |
1 | :: 应确保在杀死父进程前,先杀死其所有子进程 |
蛇皮修复法
总结check方式发现check每5分钟只会请求一次index.php和admin.php(因为这里抓到了流量)
且均为get方式,无参数访问。
这意味着check可能只通过判断状态响应头是否为200,或者是否当前页面有某些关键信息,来判断主机存活。于是我很蛇皮的ctrl+s保存了index.php和admin.php的前端。然后删光了web2所有文件,将两个纯静态html+静态文件夹上传到服务器。。。
然后就很舒服的过了check,并且永远没有再被攻击……XD
真的服了这个check机制了~